home *** CD-ROM | disk | FTP | other *** search
/ Internet Surfer 2.0 / Internet Surfer 2.0 (Wayzata Technology) (1996).iso / pc / text / mac / faqs.354 < prev    next >
Lisp/Scheme  |  1996-02-12  |  29KB  |  628 lines

  1. Frequently Asked Questions (FAQS);faqs.354
  2.  
  3.  
  4.  
  5.    1969            Anthony Hearn and Martin Griss define Standard Lisp to
  6.                    port REDUCE, a symbolic algebra system, to a variety
  7.                    of architectures.
  8.  
  9.    late 70s        Macsyma group at MIT developed NIL (New Implementation
  10.                    of Lisp), a Lisp for the VAX.
  11.  
  12.                    Stanford and Lawrence Livermore National Laboratory
  13.                    develop S-1 Lisp for the Mark IIA supercomputer.
  14.  
  15.                    Franz Lisp (dialect of MacLisp) runs on stock-hardware
  16.                    Unix machines.
  17.  
  18.                    Gerald J. Sussman and Guy L. Steele developed Scheme,
  19.                    a simple dialect of Lisp with lexical scoping and
  20.                    lexical closures, continuations as first-class objects,
  21.                    and a simplified syntax (i.e., only one binding per symbol).
  22.  
  23.                    Advent of object-oriented programming concepts in Lisp.
  24.                    Flavors was developed at MIT for the Lisp machine,
  25.                    and LOOPS (Lisp Object Oriented Programming System) was
  26.                    developed at Xerox.
  27.  
  28.    early 80s       Development of SPICE-Lisp at CMU, a dialect of MacLisp
  29.                    designed to run on the Scientific Personal Integrated
  30.                    Computing Environment (SPICE) workstation.
  31.  
  32.    1980            First biannual ACM Lisp and Functional Programming Conf.
  33.  
  34.    1981            PSL (Portable Standard Lisp) runs on a variety of platforms.
  35.  
  36.    1981+           Lisp Machines from Xerox, LMI (Lisp Machines Inc)
  37.                    and Symbolics available commercially.
  38.  
  39.    April 1981      Grass roots definition of Common Lisp as a description
  40.                    of the common aspects of the family of languages (Lisp
  41.                    Machine Lisp, MacLisp, NIL, S-1 Lisp, Spice Lisp, Scheme).
  42.  
  43.  
  44.    1984            Publication of CLtL1. Common Lisp becomes a de facto
  45.                    standard.
  46.  
  47.    1986            X3J13 forms to produce a draft for an ANSI Common Lisp
  48.                    standard.
  49.  
  50.    1987            Lisp Pointers commences publication.
  51.  
  52.    1990            Steele publishes CLtL2 which offers a snapshot of
  53.                    work in progress by X3J13.  (Unlike CLtL1, CLtL2
  54.                    was NOT an output of the standards process and was
  55.                    not intended to become a de facto standard.  Read
  56.                    the Second Edition Preface for further explanation
  57.                    of this important issue.) Includes CLOS,
  58.                    conditions, pretty printing and iteration facilities.
  59.  
  60.    1992            X3J13 creates a draft proposed American National
  61.                    Standard for Common Lisp. This document is the
  62.                    first official successor to CLtL1.
  63.  
  64. [Note: This summary is based primarily upon the History section of the
  65. draft ANSI specification. More detail and references can be obtained from
  66. that document. See [1-5] for information on obtaining a copy.]
  67. ----------------------------------------------------------------
  68. [2-14]  How do I find the argument list of a function?
  69.         How do I get the function name from a function object?
  70.  
  71. There is no standard way to find the argument list of a function,
  72. since implementations are not required to save this information.
  73. However, many implementations do remember argument information, and
  74. usually have a function that returns the lambda list. Here are the
  75. commands from some Lisp implementations:
  76.  
  77.    Lucid:                               arglist
  78.    Allegro:                             excl::arglist
  79.    Symbolics:                           arglist
  80.  
  81. CMU Common Lisp, new compiler:
  82.    #+(and :CMU :new-compiler)
  83.    (defun arglist (name)
  84.      (let* ((function (symbol-function name))
  85.             (stype (system:%primitive get-vector-subtype function)))
  86.        (when (eql stype system:%function-entry-subtype)
  87.          (cadr (system:%primitive header-ref function
  88.                                   system:%function-entry-type-slot)))))
  89.  
  90. If you're interested in the number of required arguments you could use
  91.  
  92.    (defun required-arguments (name)
  93.      (or (position-if #'(lambda (x) (member x lambda-list-keywords))
  94.                       (arglist name))
  95.          (length (arglist name))))
  96.  
  97. To extract the function name from the function object, as in
  98.         (function-name #'car) ==> 'car
  99. use the following vendor-dependent functions:
  100.  
  101.    Symbolics: (si::compiled-function-name <fn>)
  102.    Lucid:     (sys::procedure-ref <fn> SYS:PROCEDURE-SYMBOL)
  103.    Allegro:   (Xref::object-to-function-name <fn>)
  104.    CMU CL:    (kernel:%function-header-name <fn>)
  105.    AKCL:      (system::compiled-function-name <fn>)
  106.    MCL:       (ccl::function-name <fn>)
  107.  
  108. ----------------------------------------------------------------
  109. [2-15]  How can I have two Lisp processes communicate via unix sockets?
  110.  
  111. CLX uses Unix sockets to communicate with the X window server. Look at
  112. the following files from the CLX distribution for a good example of
  113. using Unix sockets from Lisp:
  114.         defsystem.lisp          Lucid, AKCL, IBCL, CMU.
  115.         socket.c, sockcl.lisp   AKCL, IBCL
  116.         excldep.lisp            Franz Allegro CL
  117. You will need the "socket.o" files which come with Lucid and Allegro.
  118. To obtain CLX, see the entry for CLX in the answer to question [6-5].
  119.  
  120. See the file lisp-sockets.text in the Lisp Utilities repository
  121. described in the answer to question [6-1].
  122.  
  123. ----------------------------------------------------------------
  124.  
  125. ;;; *EOF*
  126. Xref: bloom-picayune.mit.edu comp.lang.lisp:8751 news.answers:4561
  127. Path: bloom-picayune.mit.edu!enterpoop.mit.edu!spool.mu.edu!uunet!ogicse!das-news.harvard.edu!cantaloupe.srv.cs.cmu.edu!crabapple.srv.cs.cmu.edu!mkant
  128. From: mkant+@cs.cmu.edu (Mark Kantrowitz)
  129. Newsgroups: comp.lang.lisp,news.answers
  130. Subject: FAQ: Lisp Frequently Asked Questions 3/6 [Monthly posting]
  131. Summary: Common Pitfalls
  132. Message-ID: <lisp-faq-3.text_724237304@cs.cmu.edu>
  133. Date: 13 Dec 92 09:02:09 GMT
  134. Article-I.D.: cs.lisp-faq-3.text_724237304
  135. Expires: Tue, 26 Jan 1993 09:01:44 GMT
  136. Sender: news@cs.cmu.edu (Usenet News System)
  137. Reply-To: lisp-faq@think.com
  138. Followup-To: poster
  139. Organization: School of Computer Science, Carnegie Mellon
  140. Lines: 707
  141. Approved: news-answers-request@MIT.Edu
  142. Supersedes: <lisp-faq-3.text_721645325@cs.cmu.edu>
  143. Nntp-Posting-Host: a.gp.cs.cmu.edu
  144.  
  145. Archive-name: lisp-faq/part3
  146. Last-Modified: Thu Nov  5 19:30:40 1992 by Mark Kantrowitz
  147. Version: 1.27
  148.  
  149. ;;; ****************************************************************
  150. ;;; Answers to Frequently Asked Questions about Lisp ***************
  151. ;;; ****************************************************************
  152. ;;; Written by Mark Kantrowitz and Barry Margolin
  153. ;;; lisp-faq-3.text -- 32488 bytes
  154.  
  155. This post contains Part 3 of the Lisp FAQ.
  156.  
  157. If you think of questions that are appropriate for this FAQ, or would
  158. like to improve an answer, please send email to us at lisp-faq@think.com.
  159.  
  160. This section contains a list of common pitfalls. Pitfalls are aspects
  161. of Common Lisp which are non-obvious to new programmers and often
  162. seasoned programmers as well.
  163.  
  164. Common Pitfalls (Part 3):
  165.  
  166.   [3-0]  Why does (READ-FROM-STRING "foobar" :START 3) return FOOBAR
  167.          instead of BAR?
  168.   [3-1]  Why can't it deduce from (READ-FROM-STRING "foobar" :START 3)
  169.          that the intent is to specify the START keyword parameter
  170.          rather than the EOF-ERROR-P and EOF-VALUE optional parameters?
  171.   [3-2]  Why can't I apply #'AND and #'OR?
  172.   [3-3]  I used a destructive function (e.g. DELETE, SORT), but it
  173.          didn't seem to work.  Why?
  174.   [3-4]  After I NREVERSE a list, it's only one element long.  After I
  175.          SORT a list, it's missing things.  What happened?
  176.   [3-5]  Why does (READ-LINE) return "" immediately instead of waiting
  177.          for me to type a line?
  178.   [3-6]  I typed a form to the read-eval-print loop, but nothing happened. Why?
  179.   [3-7]  DEFMACRO doesn't seem to work.
  180.          When I compile my file, LISP warns me that my macros are undefined
  181.          functions, or complains "Attempt to call <function> which is
  182.          defined as a macro.
  183.   [3-8]  Name conflict errors are driving me crazy! (EXPORT, packages)
  184.   [3-9]  Closures don't seem to work properly when referring to the
  185.          iteration variable in DOLIST, DOTIMES and DO.
  186.   [3-10] What is the difference between FUNCALL and APPLY?
  187.   [3-11] Miscellaneous things to consider when debugging code.
  188.   [3-12] When is it right to use EVAL?
  189.   [3-13] Why does my program's behavior change each time I use it?
  190.   [3-14] When producing formatted output in Lisp, where should you put the
  191.          newlines (e.g., before or after the line, FRESH-LINE vs TERPRI,
  192.          ~& vs ~% in FORMAT)?
  193.   [3-15] I'm using DO to do some iteration, but it doesn't terminate.
  194.  
  195. Search for [#] to get to question number # quickly.
  196.  
  197. ----------------------------------------------------------------
  198. [3-0] Why does (READ-FROM-STRING "foobar" :START 3) return FOOBAR instead
  199.       of BAR?
  200.  
  201. READ-FROM-STRING is one of the rare functions that takes both &OPTIONAL and
  202. &KEY arguments:
  203.  
  204.        READ-FROM-STRING string &OPTIONAL eof-error-p eof-value
  205.                                &KEY :start :end :preserve-whitespace
  206.  
  207. When a function takes both types of arguments, all the optional
  208. arguments must be specified explicitly before any of the keyword
  209. arguments may be specified.  In the example above, :START becomes the
  210. value of the optional EOF-ERROR-P parameter and 3 is the value of the
  211. optional EOF-VALUE parameter.
  212.  
  213. ----------------------------------------------------------------
  214. [3-1] Why can't it deduce from (READ-FROM-STRING "foobar" :START 3) that
  215.       the intent is to specify the START keyword parameter rather than
  216.       the EOF-ERROR-P and EOF-VALUE optional parameters?
  217.  
  218. In Common Lisp, keyword symbols are first-class data objects.  Therefore,
  219. they are perfectly valid values for optional parameters to functions.
  220. There are only four functions in Common Lisp that have both optional and
  221. keyword parameters (they are PARSE-NAMESTRING, READ-FROM-STRING,
  222. WRITE-LINE, and WRITE-STRING), so it's probably not worth adding a
  223. nonorthogonal kludge to the language just to make these functions slightly
  224. less confusing; unfortunately, it's also not worth an incompatible change
  225. to the language to redefine those functions to use only keyword arguments.
  226.  
  227. ----------------------------------------------------------------
  228. [3-2] Why can't I apply #'AND and #'OR?
  229.  
  230. Here's the simple, but not necessarily satisfying, answer: AND and OR are
  231. macros, not functions; APPLY and FUNCALL can only be used to invoke
  232. functions, not macros and special operators.
  233.  
  234. OK, so what's the *real* reason?  The reason that AND and OR are macros
  235. rather than functions is because they implement control structure in
  236. addition to computing a boolean value.  They evaluate their subforms
  237. sequentially from left/top to right/bottom, and stop evaluating subforms as
  238. soon as the result can be determined (in the case of AND, as soon as a
  239. subform returns NIL; in the case of OR, as soon as one returns non-NIL);
  240. this is referred to as "short circuiting" in computer language parlance.
  241. APPLY and FUNCALL, however, are ordinary functions; therefore, their
  242. arguments are evaluated automatically, before they are called.  Thus, were
  243. APPLY able to be used with #'AND, the short-circuiting would be defeated.
  244.  
  245. Perhaps you don't really care about the short-circuiting, and simply want
  246. the functional, boolean interpretation.  While this may be a reasonable
  247. interpretation of trying to apply AND or OR, it doesn't generalize to other
  248. macros well, so there's no obvious way to have the Lisp system "do the
  249. right thing" when trying to apply macros.  The only function associated
  250. with a macro is its expander function; this function accepts and returns
  251. and form, so it cannot be used to compute the value.
  252.  
  253. The Common Lisp functions EVERY and SOME can be used to get the
  254. functionality you intend when trying to apply #'AND and #'OR.  For
  255. instance, the erroneous form:
  256.  
  257.    (apply #'and *list*)
  258.  
  259. can be translated to the correct form:
  260.  
  261.    (every #'identity *list*)
  262.  
  263. ----------------------------------------------------------------
  264. [3-3] I used a destructive function (e.g. DELETE, SORT), but it didn't seem to
  265.       work.  Why?
  266.  
  267. I assume you mean that it didn't seem to modify the original list.  There
  268. are several possible reasons for this.  First, many destructive functions
  269. are not *required* to modify their input argument, merely *allowed* to; in
  270. some cases, the implementation may determine that it is more efficient to
  271. construct a new result than to modify the original (this may happen in Lisp
  272. systems that use "CDR coding", where RPLACD may have to turn a CDR-NEXT or
  273. CDR-NIL cell into a CDR-NORMAL cell), or the implementor may simply not
  274. have gotten around to implementing the destructive version in a truly
  275. destructive manner.  Another possibility is that the nature of the change
  276. that was made involves removing elements from the front of a list; in this
  277. case, the function can simply return the appropriate tail of the list,
  278. without actually modifying the list. And example of this is:
  279.  
  280.    (setq *a* (list 3 2 1))
  281.    (delete 3 *a*) => (2 1)
  282.    *a* => (3 2 1)
  283.  
  284. Similarly, when one sorts a list, SORT may destructively rearrange the
  285. pointers (cons cells) that make up the list. SORT then returns the cons
  286. cell that now heads the list; the original cons cell could be anywhere in
  287. the list. The value of any variable that contained the original head of the
  288. list hasn't changed, but the contents of that cons cell have changed
  289. because SORT is a destructive function:
  290.  
  291.    (setq *a* (list 2 1 3))
  292.    (sort *a* #'<) => (1 2 3)
  293.    *a* => (2 3)
  294.  
  295. In both cases, the remedy is the same: store the result of the
  296. function back into the place whence the original value came, e.g.
  297.  
  298.    (setq *a* (delete 3 *a*))
  299.    *a* => (2 1)
  300.  
  301. Why don't the destructive functions do this automatically?  Recall that
  302. they are just ordinary functions, and all Lisp functions are called by
  303. value.  Therefore, these functions do not know where the lists they are
  304. given came from; they are simply passed the cons cell that represents the
  305. head of the list. Their only obligation is to return the new cons cell that
  306. represents the head of the list.
  307.  
  308. One thing to be careful about when doing this is that the original list
  309. might be referenced from multiple places, and all of these places may need
  310. to be updated.  For instance:
  311.  
  312.    (setq *a* (list 3 2 1))
  313.    (setq *b* *a*)
  314.    (setq *a* (delete 3 *a*))
  315.    *a* => (2 1)
  316.    *b* => (3 2 1) ; *B* doesn't "see" the change
  317.    (setq *a* (delete 1 *a*))
  318.    *a* => (2)
  319.    *b* => (3 2) ; *B* sees the change this time, though
  320.  
  321. One may argue that destructive functions could do what you expect by
  322. rearranging the CARs of the list, shifting things up if the first element
  323. is being deleted, as they are likely to do if the argument is a vector
  324. rather than a list.  In many cases they could do this, although it would
  325. clearly be slower.  However, there is one case where this is not possible:
  326. when the argument or value is NIL, and the value or argument, respectively,
  327. is not.  It's not possible to transform the object referenced from the
  328. original cell from one data type to another, so the result must be stored
  329. back.  Here are some examples:
  330.  
  331.    (setq *a* (list 3 2 1))
  332.    (delete-if #'numberp *a) => NIL
  333.    *a* => (3 2 1)
  334.    (setq *a* nil *b* '(1 2 3))
  335.    (nconc *a* *b*) => (1 2 3)
  336.    *a* => NIL
  337.  
  338. The names of most destructure functions (except for sort, delete,
  339. rplaca, rplacd, and setf of accessor functions) have the prefix N.
  340.  
  341. In summary, the two common problems to watch out for when using
  342. destructive functions are:
  343.  
  344.    1. Forgetting to store the result back. Even though the list
  345.       is modified in place, it is still necessary to store the
  346.       result of the function back into the original location, e.g.,
  347.            (setq foo (delete 'x foo))
  348.  
  349.       If the original list was stored in multiple places, you may
  350.       need to store it back in all of them, e.g.
  351.            (setq bar foo)
  352.            ...
  353.            (setq foo (delete 'x foo))
  354.            (setq bar foo)
  355.  
  356.    2. Sharing structure that gets modified. If it is important
  357.       to preserve the shared structure, then you should either
  358.       use a nondestructive operation or copy the structure first
  359.       using COPY-LIST or COPY-TREE.
  360.            (setq bar (cdr foo))
  361.            ...
  362.            (setq foo (sort foo #'<))
  363.            ;;; now it's not safe to use BAR
  364.  
  365. Note that even nondestructive functions, such as REMOVE, and UNION,
  366. can return a result which shares structure with an argument.
  367. Nondestructive functions don't necessarily copy their arguments; they
  368. just don't modify them.
  369.  
  370. ----------------------------------------------------------------
  371. [3-4] After I NREVERSE a list, it's only one element long.  After I SORT
  372.       a list, it's missing things.  What happened?
  373.  
  374. These are particular cases of the previous question.  Many NREVERSE and
  375. SORT implementations operate by rechaining all the CDR links in the list's
  376. backbone, rather than by replacing the CARs.  In the case of NREVERSE, this
  377. means that the cons cell that was originally first in the list becomes the
  378. last one.  As in the last question, the solution is to store the result
  379. back into the original location.
  380.  
  381. ----------------------------------------------------------------
  382. [3-5] Why does (READ-LINE) return "" immediately instead of waiting for
  383.       me to type a line?
  384.  
  385. Many Lisp implementations on line-buffered systems do not discard the
  386. newline that the user must type after the last right parenthesis in order
  387. for the line to be transmitted from the OS to Lisp.  Lisp's READ function
  388. returns immediately after seeing the matching ")" in the stream.  When
  389. READLINE is called, it sees the next character in the stream, which is a
  390. newline, so it returns an empty line.  If you were to type "(read-line)This
  391. is a test" the result would be "This is a test".
  392.  
  393. The simplest solution is to use (PROGN (CLEAR-INPUT) (READ-LINE)).  This
  394. discards the buffered newline before reading the input.  However, it would
  395. also discard any other buffered input, as in the "This is a test" example
  396. above; some implementation also flush the OS's input buffers, so typeahead
  397. might be thrown away.
  398.  
  399. ----------------------------------------------------------------
  400. [3-6] I typed a form to the read-eval-print loop, but nothing happened. Why?
  401.  
  402. There's not much to go on here, but a common reason is that you haven't
  403. actually typed a complete form.  You may have typed a doublequote, vertical
  404. bar, "#|" comment beginning, or left parenthesis that you never matched
  405. with another doublequote, vertical bar, "|#", or right parenthesis,
  406. respectively.  Try typing a few right parentheses followed by Return.
  407.  
  408. ----------------------------------------------------------------
  409. [3-7]  DEFMACRO doesn't seem to work.
  410.        When I compile my file, LISP warns me that my macros are undefined
  411.        functions, or complains "Attempt to call <function> which is
  412.        defined as a macro.
  413.  
  414. When you evaluate a DEFMACRO form or proclaim a function INLINE, it
  415. doesn't go back and update code that was compiled under the old
  416. definition. When redefining a macro, be sure to recompile any
  417. functions that use the macro. Also be sure that the macros used in a
  418. file are defined before any forms in the same file that use them.
  419.  
  420. Certain forms, including LOAD, SET-MACRO-CHARACTER, and
  421. REQUIRE, are not normally evaluated at compile time. Common Lisp
  422. requires that macros defined in a file be used when compiling later
  423. forms in the file. If a Lisp doesn't follow the standard, it may be
  424. necessary to wrap an EVAL-WHEN form around the macro definition.
  425.  
  426. Most often the "macro was previously called as a function" problem
  427. occurs when files were compiled/loaded in the wrong order. For
  428. example, developers may add the definition to one file, but use it in
  429. a file which is compiled/loaded before the definition. To work around
  430. this problem, one can either fix the modularization of the system, or
  431. manually recompile the files containing the forward references to macros.
  432.  
  433. Also, if your macro calls functions at macroexpand time, those functions
  434. may need to be in an EVAL-WHEN. For example,
  435.  
  436.     (defun some-function (x)
  437.       x)
  438.  
  439.     (defmacro some-macro (y)
  440.       (let ((z (some-function y)))
  441.         `(print ',z)))
  442.  
  443. If the macros are defined in a file you require, make sure your
  444. require or load statement is in an appropriate EVAL-WHEN. Many people
  445. avoid all this nonsense by making sure to load all their files before
  446. compiling them, or use a system facility (or just a script file) that
  447. loads each file before compiling the next file in the system.
  448.  
  449. ----------------------------------------------------------------
  450. [3-8]  Name conflict errors are driving me crazy! (EXPORT, packages)
  451.  
  452. If a package tries to export a symbol that's already defined, it will
  453. report an error. You probably tried to use a function only to discover
  454. that you'd forgotten to load its file. The failed attempt at using the
  455. function caused its symbol to be interned. So now, when you try to
  456. load the file, you get a conflict. Unfortunately, understanding and
  457. correcting the code which caused the export problem doesn't make those
  458. nasty error messages go away. That symbol is still interned where it
  459. shouldn't be. Use unintern to remove the symbol from a package before
  460. reloading the file. Also, when giving arguments to REQUIRE or package
  461. functions, use strings or keywords, not symbols: (find-package "FOO"),
  462. (find-package :foo).
  463.  
  464. A sometimes useful technique is to rename (or delete) a package
  465. that is "too messed up".  Then you can reload the relevant files
  466. into a "clean" package.
  467.  
  468. ----------------------------------------------------------------
  469. [3-9]  Closures don't seem to work properly when referring to the
  470.        iteration variable in DOLIST, DOTIMES and DO.
  471.  
  472. DOTIMES, DOLIST, and DO all use assignment instead of binding to
  473. update the value of the iteration variables. So something like
  474.  
  475.    (let ((l nil))
  476.      (dotimes (n 10)
  477.        (push #'(lambda () n)
  478.          l)))
  479.  
  480. will produce 10 closures over the same value of the variable N.
  481. ----------------------------------------------------------------
  482. [3-10] What is the difference between FUNCALL and APPLY?
  483.  
  484. FUNCALL is useful when the programmer knows the length of the argument
  485. list, but the function to call is either computed or provided as a
  486. parameter.  For instance, a simple implementation of MEMBER-IF (with
  487. none of the fancy options) could be written as:
  488.  
  489. (defun member-if (predicate list)
  490.   (do ((tail list (cdr tail)))
  491.       ((null tail))
  492.    (when (funcall predicate (car tail))
  493.      (return-from member-if tail))))
  494.  
  495. The programmer is invoking a caller-supplied function with a known
  496. argument list.
  497.  
  498. APPLY is needed when the argument list itself is supplied or computed.
  499. Its last argument must be a list, and the elements of this list become
  500. individual arguments to the function.  This frequently occurs when a
  501. function takes keyword options that will be passed on to some other
  502. function, perhaps with application-specific defaults inserted.  For
  503. instance:
  504.  
  505. (defun open-for-output (pathname &rest open-options)
  506.   (apply #'open pathname :direction :output open-options))
  507.  
  508. FUNCALL could actually have been defined using APPLY:
  509.  
  510. (defun funcall (function &rest arguments)
  511.   (apply function arguments))
  512.  
  513. ----------------------------------------------------------------
  514. [3-11] Miscellaneous things to consider when debugging code.
  515.  
  516. This question lists a variety of problems to watch out for when
  517. debugging code. This is sort of a catch-all question for problems too
  518. small to merit a question of their own. See also question [1-2] for
  519. some other common problems.
  520.  
  521. Functions:
  522.  
  523.   * (flet ((f ...)) (eq #'f #'f)) can return false.
  524.  
  525.   * The function LIST-LENGTH is not a faster, list-specific version
  526.     of the sequence function LENGTH.  It is list-specific, but it's
  527.     slower than LENGTH because it can handle circular lists.
  528.  
  529.   * Don't confuse the use of LISTP and CONSP. CONSP tests for the
  530.     presence of a cons cell, but will return NIL when called on NIL.
  531.     LISTP could be defined as (defun listp (x) (or (null x) (consp x))).
  532.  
  533.   * Use the right test for equality:
  534.         EQ      tests if the objects are identical -- numbers with the
  535.                 same value need not be EQ, nor are two similar lists
  536.                 necessarily EQ. Similarly for characters and strings.
  537.                 For instance, (let ((x 1)) (eq x x)) is not guaranteed
  538.                 to return T.
  539.         EQL     Like EQ, but is also true if the arguments are numbers
  540.                 of the same type with the same value or character objects
  541.                 representing the same character. (eql -0.0 0.0) is not
  542.                 guaranteed to return T.
  543.         EQUAL   Tests if the arguments are structurally isomorphic, using
  544.                 EQUAL to compare components that conses, arrays, strings
  545.                 or pathnames, and EQ for all other data objects
  546.                 (except for numbers and characters, which are compared
  547.                 using EQL).
  548.         EQUALP  Like EQUAL, but ignores type differences when comparing
  549.                 numbers and case differences when comparing characters.
  550.         =       Compares the values of two numbers even if they are of
  551.                 different types.
  552.         CHAR=   Case-sensitive comparison of characters.
  553.         CHAR-EQUAL      Case-insensitive comparison of characters.
  554.         STRING= Compares two strings, checking if they are identical.
  555.                 It is case sensitive.
  556.         STRING-EQUAL  Like STRING=, but case-insensitive.
  557.  
  558.   * Some destructive functions that you think would modify CDRs might
  559.     modify CARs instead.  (E.g., NREVERSE.)
  560.  
  561.   * READ-FROM-STRING has some optional arguments before the
  562.     keyword parameters.  If you want to supply some keyword
  563.     arguments, you have to give all of the optional ones too.
  564.  
  565.   * If you use the function READ-FROM-STRING, you should probably bind
  566.     *READ-EVAL* to NIL. Otherwise an unscrupulous user could cause a
  567.     lot of damage by entering
  568.         #.(shell "cd; rm -R *")
  569.     at a prompt.
  570.  
  571.   * Only functional objects can be funcalled in CLtL2, so a lambda
  572.     expression '(lambda (..) ..) is no longer suitable. Use
  573.     #'(lambda (..) ..) instead. If you must use '(lambda (..) ..),
  574.     coerce it to type FUNCTION first using COERCE.
  575.  
  576. Methods:
  577.  
  578.   * PRINT-OBJECT methods can make good code look buggy. If there is a
  579.     problem with the PRINT-OBJECT methods for one of your classes, it
  580.     could make it seem as though there were a problem with the object.
  581.     It can be very annoying to go chasing through your code looking for
  582.     the cause of the wrong value, when the culprit is just a bad
  583.     PRINT-OBJECT method.
  584.  
  585. Initialization:
  586.  
  587.   * Don't count on array elements being initialized to NIL, if you don't
  588.     specify an :initial-element argument to MAKE-ARRAY. For example,
  589.          (make-array 10) => #(0 0 0 0 0 0 0 0 0 0)
  590.  
  591. Iteration vs closures:
  592.  
  593.   * DO and DO* update the iteration variables by assignment; DOLIST and
  594.     DOTIMES are allowed to use assignment (rather than a new binding).
  595.     (All CLtL1 says of DOLIST and DOTIMES is that the variable "is
  596.     bound" which has been taken as _not_ implying that there will be
  597.     separate bindings for each iteration.)
  598.  
  599.     Consequently, if you make closures over an iteration variable
  600.     in separate iterations they may nonetheless be closures over
  601.     the same variable and hence will all refer to the same value
  602.     -- whatever value the variable was given last.  For example,
  603.         (let ((fns '()))
  604.           (do ((x '(1 2) (cdr x)))
  605.               ((null x))
  606.             (push #'(lambda () x)
  607.                   fns))
  608.           (mapcar #'funcall (reverse fns)))
  609.     returns (nil nil), not (1 2), not even (2 2). Thus
  610.          (let ((l nil))
  611.            (dolist (a '(1 2 3) l)
  612.              (push #'(lambda () a)
  613.                    l)))
  614.     returns a list of three closures closed over the same bindings, whereas
  615.          (mapcar #'(lambda (a) #'(lambda () a)) '(1 2 3))
  616.     returns a list of closures over distinct bindings.
  617.  
  618. Defining Variables and Constants:
  619.  
  620.   * (defvar var init) assigns to the variable only if it does not
  621.     already have a value.  So if you edit a DEFVAR in a file and
  622.     reload the file only to find that the value has not changed,
  623.     this is the reason.  (Use DEFPARAMETER if you want the value
  624.     to change upon reloading.) DEFVAR is used to declare a variable
  625.     that is changed by the program; DEFPARAMETER is used to declare
  626.     a variable that is normally constant, but which can be changed
  627.     to change the functioning of a program.
  628.